// DoubleChatSessionDetailWidget.hpp
// Created by Limou on 24-10-5.

#ifndef FRONTEND_DOUBLECHATSESSIONDETAILWIDGET_HPP
#define FRONTEND_DOUBLECHATSESSIONDETAILWIDGET_HPP

// >>> class DoubleChatSessionDetailWidget begin: 描述了一个双人会话的详细弹窗 >>>
namespace chat_system::subassembly {
    class DoubleChatSessionDetailWidget : public QDialog {
    private: // TODO: 组件太大的话, 也不是不可以考虑文件内部分离
        // 部件
        QPushButton* addSessionBtn_; // 创建新会话按钮
        QLabel* addSessionLab_; // 创建新会话标签
        QPushButton* userBtn_; // 对方用户按钮
        QLabel* userLab_; // 对方用户标签
        QPushButton* deleteUserBtn_; // 删除对方用户按钮
        ChooseFriendDialog::ChooseFriendDialog* chooseFriendDialog_; // 选择好友对话框
        QVBoxLayout* layout_; // 布局管理器

        // 数据
        model::UserModel user_; // 对方用户信息

    public:
        DoubleChatSessionDetailWidget(const model::UserModel& user)
        : addSessionBtn_(new QPushButton(this))
        , addSessionLab_(new QLabel(this))
        , userBtn_(new QPushButton(this))
        , userLab_(new QLabel(this))
        , deleteUserBtn_(new QPushButton(this))
        , chooseFriendDialog_()
        , layout_(new QVBoxLayout())
        , user_(user) {
            this->setElement(); // 设置组件
            this->setElementStyle(); // 设置组件样式
            this->setElementLayout(); // 设置组件布局
            this->setElementSignalSlot(); // 设置信号槽
        }

    private:
        // 设置组件方法
        void setElement() {
            // 设置本部件
            this->setFixedSize(QSize(200, 300));
            this->setWindowTitle("会话详情");
            QIcon windowIcon(":/window/window_main/logo.png");
            if (windowIcon.isNull()) { common::Tools::getInstance()->getLogger()->warn("DoubleChatSessionDetailWidget(): windowIcon is null"); }
            this->setWindowIcon(windowIcon);
            this->setAttribute(Qt::WA_DeleteOnClose);
            this->move(QCursor::pos()); // 默认移动到鼠标的位置

            // 设置尺寸
            QSize size(50, 50);

            // [会话]
            // 设置创建新会话按钮
            addSessionBtn_->setFixedSize(size);
            addSessionBtn_->setIconSize(size);
            QIcon addSessionBtnIcon(":/window/window_right/add_session_button");
            if (addSessionBtnIcon.isNull()) { common::Tools::getInstance()->getLogger()->error("DoubleChatSessionDetailWidget(): addSessionBtnIcon is null"); }
            addSessionBtn_->setIcon(addSessionBtnIcon);

            // 设置创建新会话标签
            addSessionLab_->setFixedSize(size);
            addSessionLab_->setText("添加");
            addSessionLab_->setAlignment(Qt::AlignCenter);
            // TODO: 设置文本截断

            // [用户]
            // 设置对方用户按钮
            userBtn_->setFixedSize(size);
            userBtn_->setIconSize(size);
            QIcon userBtnIcon = user_.getUserAvatarIco();
            if (userBtnIcon.isNull()) { common::Tools::getInstance()->getLogger()->error("DoubleChatSessionDetailWidget(): userBtnIcon is null"); }
            userBtn_->setIcon(userBtnIcon);

            // 设置对方用户标签
            userLab_->setFixedSize(size);
            userLab_->setText(user_.getUserNickName());
            userLab_->setAlignment(Qt::AlignCenter);
            // TODO: 设置文本截断

            // [删除]
            // 设置删除对方用户按钮
            deleteUserBtn_->setFixedSize(QSize(100, 30));
            deleteUserBtn_->setText("删除用户");
        }

        // 设置组件样式方法
        void setElementStyle() {
            this->setStyleSheet(
                    "QDialog {"
                    "background-color: rgb(245, 245, 245);"
                    "}"
            );

            // 设置图标按钮风格
            QString btnStyle =
                    "QPushButton {"
                    "border: none;"
                    "background-color: transparent;"
                    "}";

            // 设置文字标签风格
            QString labStyle =
                    "QLabel {"
                    "color: black;"
                    "font-size: 14px;"
                    "font-weight: 800;"
                    "border: none;"
                    "background-color: transparent;"
                    "}";

            addSessionBtn_->setStyleSheet(btnStyle);
            addSessionLab_->setStyleSheet(labStyle);
            userBtn_->setStyleSheet(btnStyle);
            userLab_->setStyleSheet(labStyle);

            deleteUserBtn_->setStyleSheet(
                    "QPushButton {"
                    "color: red;"
                    "border: none;"
                    "font-size: 15px;"
                    "background-color: rgb(233, 233, 233);"  // 默认背景颜色
                    "border-radius: 5px;"
                    "}"
                    "QPushButton:hover {"
                    "background-color: rgb(210, 210, 210);"  // 鼠标悬停时的背景颜色
                    "}"
                    "QPushButton:pressed {"
                    "background-color: rgb(198, 198, 198);"  // 鼠标按下时的背景颜色
                    "}"
            );
        }

        // 设置组件布局方法
        void setElementLayout() {
            // 创建布局, 添加会话按钮和标签
            auto* addSessionLayout = new QVBoxLayout();
            addSessionLayout->addWidget(addSessionBtn_, 0, Qt::AlignCenter);
            addSessionLayout->addWidget(addSessionLab_, 0, Qt::AlignCenter);

            // 创建布局, 用于用户按钮和标签
            auto* userLayout = new QVBoxLayout();
            userLayout->addWidget(userBtn_, 0, Qt::AlignCenter);
            userLayout->addWidget(userLab_, 0, Qt::AlignCenter);

            // 在主布局中添加组件
            auto* hLayout = new QHBoxLayout();
            hLayout->addLayout(addSessionLayout);
            hLayout->addLayout(userLayout);

            // 设置主布局
            layout_->setSpacing(0);
            layout_->setContentsMargins(5, 5, 5, 5);
            layout_->addLayout(hLayout);
            layout_->addWidget(deleteUserBtn_, 0, Qt::AlignCenter);
            this->setLayout(layout_);
        }

        // 设置信号槽
        void setElementSignalSlot() {
            connect(addSessionBtn_, &QPushButton::clicked, this, [=](){
                chooseFriendDialog_ = new ChooseFriendDialog::ChooseFriendDialog();
                chooseFriendDialog_->show();
            });
        }
    };
} // namespace chat_system::subassembly end
// <<< class DoubleChatSessionDetailWidget end <<<

#endif //FRONTEND_DOUBLECHATSESSIONDETAILWIDGET_HPP
